The code below assumes that a PrintJob is already open.
PEGetNTables, PEGetNthTableType, PESetNthTableLogOnInfo, PETestNthTableConnectivity, PEGetSQLQuery, PESetSQLQuery PEGetHandleString
uses CRDelphi; {Stringlists to store the LogOn information} var sQuery : TStringList; procedure GetSQLQuery; var TableType : PETableType; LogInfo : PELogOnInfo; nTables, nTable : Smallint; hText : hWnd; nTextLen : smallint; pRptCurrent : PChar; begin TableType.StructSize := SizeOf(PETableType); LogInfo.StructSize := SizeOf(PELogOnInfo); {We must establish a Server connection before retrieving SQL Query} {Get # of Tables} nTables := PEGetNTables(PrintJob); if nTables =-1 then {Do Error Handler}; {Loop through the tables} for nTable := 0 to (nTables - 1) do begin if not PEGetNthTableType(PrintJob, nTable, TableType) then {Do Error Handler}; {Try to find a SQL table} if (TableType.DBType = PE_DT_SQL) or (TableType.DBType = PE_DT_SQL_STORED_PROCEDURE) then begin StrPCopy(@LogInfo.ServerName, 'SqlServerOne'); StrPCopy(@LogInfo.UserID, 'James Bond'); StrPCopy(@LogInfo.Password, '007'); StrPCopy(@LogInfo.DatabaseName, 'pubs'); {Set LogOnInfo, propagating across all tables} if not PESetNthTableLogOnInfo(PrintJob, nTable, LogInfo, True) then {Do Error Handler}; {Test LogOn} if not PETestNthTableConnectivity(PrintJob, nTable) then {Do Error Handler}; Break; end; end; {Get the SQL Query} nTextLen := 0; if PEGetSQLQuery(PrintJob, hText, nTextLen) then begin {Allocate memory for temporary PChar} pRptCurrent := StrAlloc(nTextLen); {Retrieve the Query from the handle} if (nTextLen > 1) then begin if not PEGetHandleString(hText, pRptCurrent, nTextLen) then begin StrDispose(pRptCurrent); {Do Error Handler}; end; sQuery := TStringList.Create; sQuery.SetText(pRptCurrent); end; StrDispose(pRptCurrent); end; end; procedure SetSQLQuery; begin {Send the Query} if not PESetSQLQuery(PrintJob, sQuery.GetText) then begin sQuery.Free; {Do Error Handler}; end; {Free the Query StringList} sQuery.Free; end;
Seagate Software IMG Holdings, Inc. http://www.seagatesoftware.com Support services: http://support.seagatesoftware.com |